﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Globalization;

namespace SoftHotel.Models
{
    public class ReservaEvDAO
    {

        private Conexion conexionBD = new Conexion();
        

         public List<ReservaEv> ejecutar_busqueda(ReservaEv datosBusq)
         {

             
             List<ReservaEv> reservaEventos = new List<ReservaEv>();

             string consulta1 = "";
             consulta1 = "select idReserva, idCliente, numeroReserva,convert(varchar, fechaCreacion, 105), estado, cantidadInvitados, total from RESERVA where tipo=1 ";
             if (datosBusq.cliente != 0) consulta1 = consulta1 + " AND IDCLIENTE = @id ";
             if (datosBusq.numeroReserva != null) consulta1 = consulta1 + " AND NUMERORESERVA = @num ";
             if (datosBusq.fechaCreacion != null) consulta1 = consulta1 + " AND convert(varchar, fechaCreacion, 105)= @fecha ";
             if (datosBusq.estado != 5) consulta1 = consulta1 + " AND ESTADO = @estado";


             SqlDataReader dataReader = null;
             conexionBD.AbrirConexion();
             SqlCommand command = conexionBD.connection.CreateCommand();
             command.CommandText = consulta1;
             if (datosBusq.cliente != 0) command.Parameters.Add("@id", SqlDbType.Int).Value = datosBusq.cliente;
             if (datosBusq.numeroReserva != null) command.Parameters.Add("@num", SqlDbType.Char, 20).Value = datosBusq.numeroReserva;
             if (datosBusq.fechaCreacion != null) command.Parameters.Add("@fecha", SqlDbType.DateTime).Value = datosBusq.fechaCreacion;
            if (datosBusq.estado != 5) command.Parameters.Add("@estado", SqlDbType.Int).Value = datosBusq.estado;
            


             dataReader = command.ExecuteReader();

             while (dataReader != null && dataReader.Read())
             {
                 ReservaEv reservaEv = new ReservaEv();
                 reservaEv.idReserva = dataReader.GetInt32(0);
                 reservaEv.cliente = dataReader.GetInt32(1);
                 reservaEv.numeroReserva = dataReader[2].ToString();
                 //reservaEv.nombreRazonSocial 
                 reservaEv.fechaCreacion = dataReader[3].ToString();

                 reservaEv.estado = dataReader.GetInt32(4);
                 reservaEv.numInvitados = dataReader.GetInt32(5);
                 if (!dataReader.IsDBNull(6)) reservaEv.total = dataReader.GetDecimal(6);

                 //busq cliente
                 string consulta2 = "";
                 consulta2 = "SELECT NOMBRES, APELLIDOPATERNO, TIPODOC, NUMDOC FROM CLIENTE WHERE IDCLIENTE =" + reservaEv.cliente;


                 SqlDataReader dataReader1 = conexionBD.EjecutarReader(consulta2);
                 dataReader1.Read();
                 reservaEv.nombreRazonSocial = dataReader1[0].ToString() + " " + dataReader1[1].ToString();
                 reservaEv.tipoDocumento = dataReader1[2].ToString();
                 reservaEv.numeroDocumento = dataReader1[3].ToString();

                 switch (reservaEv.estado)
                 {
                     case 0: reservaEv.nomEstado = "Reservada"; break;
                     case 1: reservaEv.nomEstado = "Confirmada"; break;
                     case 2: reservaEv.nomEstado = "Iniciada"; break;
                     case 3: reservaEv.nomEstado = "Finalizada"; break;
                     case 4: reservaEv.nomEstado = "Anulada"; break;
                 }


                 reservaEventos.Add(reservaEv);
             }





             conexionBD.CerrarConexion();
             return reservaEventos;



         }


        public List<ReservaEv> ejecutar_query()
        {

            string consulta = "";
            conexionBD.AbrirConexion();
            List<ReservaEv> reservaEventos = new List<ReservaEv>();

            consulta = "select idReserva, idCliente, numeroReserva,convert(varchar, fechaCreacion, 105), estado, cantidadInvitados, total from RESERVA where tipo=1";

            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            while (dataReader != null && dataReader.Read())
            {
                ReservaEv reservaEv = new ReservaEv();
                reservaEv.idReserva = dataReader.GetInt32(0);
                reservaEv.cliente = dataReader.GetInt32(1);
                reservaEv.numeroReserva = dataReader[2].ToString();
                //reservaEv.nombreRazonSocial 
                reservaEv.fechaCreacion = dataReader[3].ToString();

                reservaEv.estado = dataReader.GetInt32(4);
                reservaEv.numInvitados = dataReader.GetInt32(5);
                if (!dataReader.IsDBNull(6)) reservaEv.total = dataReader.GetDecimal(6);

                //busq cliente
                string consulta1 = "";
                consulta1 = "SELECT NOMBRES, APELLIDOPATERNO, TIPODOC, NUMDOC FROM CLIENTE WHERE IDCLIENTE =" + reservaEv.cliente;


                SqlDataReader dataReader1 = conexionBD.EjecutarReader(consulta1);
                if (dataReader.HasRows) dataReader1.Read();
                reservaEv.nombreRazonSocial = dataReader1[0].ToString() + " " + dataReader1[1].ToString();
                reservaEv.tipoDocumento = dataReader1[2].ToString();
                reservaEv.numeroDocumento= dataReader1[3].ToString();

                switch (reservaEv.estado)
                {
                    case 0: reservaEv.nomEstado = "Reservada"; break;
                    case 1: reservaEv.nomEstado = "Confirmada"; break;
                    case 2: reservaEv.nomEstado = "Iniciada"; break;
                    case 3: reservaEv.nomEstado = "Finalizada"; break;
                    case 4: reservaEv.nomEstado = "Anulada"; break;
                }
               
                
                reservaEventos.Add(reservaEv);
            }





            conexionBD.CerrarConexion();
            return reservaEventos;
        }


        public void add_reservaEv(ReservaEv reservaEv)
        {
           
            string consulta = "";
            conexionBD.AbrirConexion();

            consulta = "INSERT INTO RESERVA (IDCLIENTE, NUMERORESERVA,TIPO,FECHACREACION,ESTADO,CANTIDADINVITADOS,TOTAL)" +
                        "VALUES (@idcliente,@numres,@tipo, SYSDATETIME() ,@estado,@cantidadinv,@total)";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = consulta;

            /*int cat = buscarSede(ambiente.sede);
            int est = buscarTipoDeAmbiente(ambiente.tipoAmbiente);*/
            

            
            command.Parameters.Add("@idcliente", SqlDbType.Int).Value = reservaEv.cliente;
            command.Parameters.Add("@numres", SqlDbType.Char, 10).Value = generarID();
            command.Parameters.Add("@tipo", SqlDbType.Int).Value = 1;
            
            command.Parameters.Add("@estado", SqlDbType.Int).Value = 1;
            command.Parameters.Add("@cantidadinv", SqlDbType.Int).Value = reservaEv.numInvitados;
            command.Parameters.Add("@total", SqlDbType.Decimal).Value = reservaEv.total;

            conexionBD.EjecutarComando2(command);

            //VEMOS QUE ID SE LE ASIGNO
            conexionBD.AbrirConexion();
            string consulta1 = "";
            consulta1 = "SELECT MAX(IDRESERVA) AS ID FROM RESERVA";
            

            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta1);
            dataReader.Read();
            
            reservaEv.idReserva =  Convert.ToInt32(dataReader["ID"].ToString());
            conexionBD.CerrarConexion();
            
        }

       


        public ReservaEv consultar_reservaEv(Int32 id)
        {
            String consulta = "";
            consulta = "select idReserva, idCliente, numeroReserva,convert(varchar, fechaCreacion, 105), estado, cantidadInvitados, total from RESERVA where idreserva = \'" + id + "\'";
            conexionBD.AbrirConexion();
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

           
            dataReader.Read();
            ReservaEv reservaEv = new ReservaEv();
            reservaEv.idReserva = dataReader.GetInt32(0);
            reservaEv.cliente = dataReader.GetInt32(1);
            reservaEv.numeroReserva = dataReader[2].ToString();
            
            reservaEv.fechaCreacion = dataReader[3].ToString();

            reservaEv.estado = dataReader.GetInt32(4);
            reservaEv.numInvitados = dataReader.GetInt32(5);
            if (!dataReader.IsDBNull(6))  reservaEv.total = dataReader.GetDecimal(6);

            dataReader.Close();


            //busq cliente
            string consulta1 = "";
            consulta1 = "SELECT NOMBRES, APELLIDOPATERNO, TIPODOC, NUMDOC FROM CLIENTE WHERE IDCLIENTE =" + reservaEv.cliente;


            SqlDataReader dataReader1 = conexionBD.EjecutarReader(consulta1);
            dataReader1.Read();
            reservaEv.nombreRazonSocial = dataReader1[0].ToString() + " " + dataReader1[1].ToString();
            reservaEv.tipoDocumento = dataReader1[2].ToString();
            reservaEv.numeroDocumento = dataReader1[3].ToString();

            switch (reservaEv.estado)
            {
                case 0: reservaEv.nomEstado = "Reservada"; break;
                case 1: reservaEv.nomEstado = "Confirmada"; break;
                case 2: reservaEv.nomEstado = "Iniciada"; break;
                case 3: reservaEv.nomEstado = "Finalizada"; break;
                case 4: reservaEv.nomEstado = "Anulada"; break;
            }

            //buscar tipo de documento

             string consulta2 = "";
            consulta2 = "SELECT VALOR FROM PARAMETRO WHERE IDPARAMETRO =" + Convert.ToInt32(reservaEv.tipoDocumento);


            SqlDataReader dataReader2 = conexionBD.EjecutarReader(consulta2);
            dataReader2.Read();
            reservaEv.tipoDocumento = dataReader2[0].ToString();


            conexionBD.CerrarConexion();
            return reservaEv;
        }

        public void editar_reservaEv(Int32 id, ReservaEv reservaEv)
        {
            string update = "";
            conexionBD.AbrirConexion();
            

            update = "UPDATE RESERVA SET idcliente= @idcliente, ESTADO = @estado, CANTIDADINVITADOS= @cantidadinv,TOTAL = @total" +
                        " WHERE IDRESERVA = @id";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = update;

            /*int cat = buscarSede(ambiente.sede);
            int est = buscarTipoDeAmbiente(ambiente.tipoAmbiente);*/

            command.Parameters.Add("@idcliente", SqlDbType.Int).Value = reservaEv.cliente;
           
            command.Parameters.Add("@estado", SqlDbType.Int).Value = reservaEv.estado;
            command.Parameters.Add("@cantidadinv", SqlDbType.Int).Value = reservaEv.numInvitados;
            command.Parameters.Add("@total", SqlDbType.Decimal).Value = reservaEv.total;
            command.Parameters.Add("@id", SqlDbType.Int).Value = id;

            conexionBD.EjecutarComando2(command);
           
        }

        public void eliminar_reservaEv(Int32 id, ReservaEv reservaEv)
        {
            string delete = "";
            conexionBD.AbrirConexion();
            delete = "DELETE FROM RESERVA WHERE IDRESERVA = @id";
            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = delete;
            command.Parameters.Add("@id", SqlDbType.Int).Value = id;
            conexionBD.EjecutarComando2(command);
            
        }


        public string generarID()
        {
            conexionBD.AbrirConexion();
            string consulta1 = "";
            consulta1 = "SELECT MAX(IDRESERVA) AS ID FROM RESERVA";


            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta1);
            dataReader.Read();

            int r = Convert.ToInt32(dataReader["ID"].ToString());
            
            r++;

            string id = r.ToString();
            int nrodig = id.Length;

            for (int i = 1; i <= 7 - nrodig; i++)
                id = "0" + id;
            id = "RES" + id;
            dataReader.Close();
            return id;
        }

        public void actualizar_monto(Int32 id){
            string consulta1 = "";
            
            conexionBD.AbrirConexion();
            consulta1 = "SELECT SUM(DetalleReserva.total) AS Expr1 FROM Reserva INNER JOIN DetalleReserva ON Reserva.idReserva = DetalleReserva.idReserva WHERE Reserva.idReserva = @id";
              SqlDataReader dataReader1 = null;
            conexionBD.AbrirConexion();
               SqlCommand command = conexionBD.connection.CreateCommand();
                command.CommandText = consulta1;
            command.Parameters.Add("@id", SqlDbType.Int).Value = id;
            dataReader1 = command.ExecuteReader();
          
            dataReader1.Read();
            Decimal total;
            if (dataReader1.IsDBNull(0)) total = 0;
            else total = dataReader1.GetDecimal(0);


            string update = "";
            conexionBD.AbrirConexion();


            update = "UPDATE RESERVA SET TOTAL = @total" +
                        " WHERE IDRESERVA = @id";

            SqlCommand command1 = conexionBD.connection.CreateCommand();
            command1.CommandText = update;


            command1.Parameters.Add("@total", SqlDbType.Decimal).Value = total;
            command1.Parameters.Add("@id", SqlDbType.Int).Value = id;

            conexionBD.EjecutarComando2(command1);
        
        
        }



    }

}